home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / GRAPHICS.SWG / 0090_RE: PLASMA (revisited).pas < prev    next >
Pascal/Delphi Source File  |  1994-05-25  |  4KB  |  169 lines

  1. {
  2. {TITLE: Plasma  FROM: Kaare Boeegh  DATE: Sun Apr 17 1994 08:25 pm}
  3. {$A+,B-,D-,E-,F+,G+,I-,L-,N-,O-,R-,S-,V-,X-}
  4. PROGRAM plasma;
  5.  
  6. CONST ys : BYTE = 0;
  7.       yt : BYTE = 255;
  8.  
  9. VAR ft   : ARRAY [0..512] OF BYTE;
  10.     sint : ARRAY [0..256] OF BYTE;
  11.     i1,a,b,d,c,od,color,e,y : BYTE;
  12.     x,k,i                   : WORD;
  13.  
  14. PROCEDURE do_tables;
  15.   VAR i : WORD;
  16.   BEGIN
  17.     FOR i := 0 TO 512 DO   FT [i] := ROUND(64+63*SIN(i/40.74));
  18.     FOR i := 0 TO 256 DO SINT [i] := ROUND(128+127*SIN(i/40.74))-1;
  19.   END;
  20.  
  21. PROCEDURE do_palette;
  22.   VAR i : WORD;
  23.   BEGIN
  24.     PORT[$3C8] := 0;
  25.     FOR i := 0 TO 255 DO
  26.       BEGIN
  27.         PORT[$3C9] := i DIV 4;
  28.         PORT[$3C9] := i DIV 6;
  29.         PORT[$3C9] := i DIV 8;
  30.       END;
  31.   END;
  32.  
  33. BEGIN
  34.   ASM
  35.     mov al,ys
  36.     mov y,al
  37.     mov ax,0013h;
  38.     int 10h;      {Set Mode $13}
  39.  
  40.     mov dx,3d4h   {Go into Double Height Pixel Mode}
  41.     mov al,9
  42.     out dx,al
  43.     inc dx
  44.     in al,dx
  45.     and al,0e0h
  46.     add al,3
  47.     out dx,al
  48.  
  49.     call do_palette;
  50.     call do_tables;
  51.  
  52. @3: inc i1  {Main Loop}                                          {Grid Counter}
  53.     sub c,2
  54.     inc od
  55.     mov al,od
  56.     mov d,al
  57.  
  58.     mov al,ys                          {Alternate Starting Position every pass}
  59.     mov ah,yt
  60.     xchg al,ah
  61.     mov ys,al
  62.     mov ah,yt
  63.     mov y,al
  64.  
  65.   @2: mov al,y                 {Calculate Offset and add one every second line}
  66.       mov bx,320
  67.       mul bx
  68.       mov bx,ax
  69.       mov al,y
  70.       mov ah,0
  71.       and al,1
  72.       add ax,bx
  73.       mov k,ax
  74.  
  75.       mov al,i1                   {move grid one pixel down every second frame}
  76.       mov ah,0
  77.       and al,1
  78.       mov ah,0
  79.       mov bx,320
  80.       mul bx
  81.  
  82.       mov bx,k
  83.       sub bx,ax
  84.       mov k,bx
  85.  
  86.       mov al,d
  87.       add al,2
  88.       mov d,al
  89.  
  90.       mov al,c           {[(c}
  91.       add al,y           {+y)}
  92.       and ax,255         {and 255]}
  93.       mov di,offset sint {get sint mem location}
  94.       add di,ax          {[c+y] and 255}
  95.       mov al,ds:[di]     {sint[(c+y) and 255]}
  96.       mov a,al
  97.  
  98.       mov di,offset sint
  99.       mov al,d
  100.       and al,255
  101.       add di,ax
  102.       mov al,ds:[di]
  103.       mov b,al
  104.  
  105.       mov ax,0
  106.       mov bx,0
  107.       mov cx,0
  108.  
  109.     @1: mov di,offset ft    {get ft mem location}
  110.         mov al,a            {a}
  111.         add al,b            {+b}
  112.         add di,ax           {[a+b]}
  113.         mov al,ds:[di]      {ft[a+b]}
  114.         mov bx,ax           {Store}
  115.         inc bx              {+1}
  116.         mov di,offset ft    {get ft mem location}
  117.         mov al,y            {y}
  118.         add al,b            {+b}
  119.         add di,ax           {[y+b]}
  120.         mov ax,ds:[di]      {ft[y+b]}
  121.         add ax,bx           {+}
  122.         mov color,al        {color:=}
  123.  
  124.         mov bx,0a000h       {screen memory location}
  125.         mov es,bx           {mov it to es}
  126.         mov di,k            {k is screen offset}
  127.  
  128.  
  129.         mov es:[di+80],al      {plot color to screen}
  130.                  { ^^ center}
  131.         mov al,b
  132.         add al,2
  133.         mov b,al
  134.  
  135.         mov ax,k {Ofs of Plasma Pixel, Increased by 2 to Create the Grid}
  136.         add ax,2
  137.         mov k,ax
  138.  
  139.         mov ah,0                                  {INC(a,1+color SHR 7);}
  140.         mov al,color
  141.         shr al,7
  142.         add al,1
  143.         mov ah,0
  144.         mov bl,al
  145.         mov al,a
  146.         add al,bl
  147.         mov a,al
  148.  
  149.         inc cx
  150.         cmp cx,80  {160}
  151.         jnz @1     {inner loop}
  152.  
  153.       inc y
  154.       cmp y,101
  155.       jnz @2     {outer loop, number of lines}
  156.  
  157.     mov ah,01h
  158.     int 16h
  159.     jz @3      {get keypress}
  160.  
  161.     mov ax,03h {mode 3}
  162.     int 10h
  163.   END;
  164. END.
  165. -----------------------------------------------------------------------------
  166. Shipley
  167. --- Synchronet
  168.  * Origin: The Brook Forest Inn [714] 951-5282 (1:103/950)
  169.